using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
using UnityEngine;

public class Lesson11 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 什么是域名解析
        //域名解析也叫域名指向 服务器设置 域名配置以及反向IP登记等等
        //说的简单点就是将好记的域名解析成IP
        //IP地址是网络上标识站点的数字地址 但是Ip地址相对来说记忆困难
        //所以为了方便记忆 采用域名来代替IP地址标识站点地址
        //比如 我们要登陆一个网页 www.baidu.com 这个就是域名 我们可以通过记忆域名来记忆一个远端服务器的地址
        //而不是一个复杂的Ip地址

        //域名解析就是域名到IP地址的转换过程 域名的解析工作由DNS服务器完成
        //我们在进行通信时又是会有需求代替IP地址标识站点地址
        #endregion

        #region  知识点二 IPHostEntry类
        //命名空间类：System.Net
        //类：IPHostEntry
        //主要作用 域名解析后的返回值 可以通过该对象获取IP地址 主机名等等信息
        //该类不会自己声明 都是作为某些方法的返回信息 我们主要通过该类对象获取返回的信息  

        //获取关联IP 成员变量:AddressList
        //获取主机别名列表 成员变量:Aliases
        //获取DNS名称 成员变量:HostName
        #endregion

        #region  知识点三 Dns类
        //命名空间：System.Net
        //类名称：Dns
        //描述：Dns类是一个静态类 提供了很多静态方法 可以使用它来根据域名

        //常用方法
        //1.获取本地系统的主机名
        print(Dns.GetHostName());

        //2.获取指定域名的IP信息
        //根据域名获取
        //同步获取
        //注意:由于获取远程主机是需要进行网络通信 所以可能会阻塞主线程
        // IPHostEntry entry = Dns.GetHostEntry("www.baidu.com");
        // for (int i = 0; i < entry.AddressList.Length; i++)
        // {
        //     print("IP地址: " + entry.AddressList[i]);
        // }
        // for (int i = 0; i < entry.Aliases.Length; i++)
        // {
        //     print("主机别名: " + entry.Aliases[i]);
        // }
        // print("DNS服务器名称: " + entry.HostName);
        //异步获取
        GetHostEntry();
        #endregion

        #region  总结   
        //如果你不知道对方的IP地址 想通过域名和对方进行通信
        //我们可以通过Dns类通过域名得到IP地址后再和对方建立连接并通信
        #endregion
    }

    private async void GetHostEntry()
    {
        Task<IPHostEntry> task = Dns.GetHostEntryAsync("www.baidu.com");
        await task;
        for (int i = 0; i < task.Result.AddressList.Length; i++)
        {
            print("IP地址: " + task.Result.AddressList[i]);
        }
        for (int i = 0; i < task.Result.Aliases.Length; i++)
        {
            print("主机别名: " + task.Result.Aliases[i]);
        }
        print("DNS服务器名称: " + task.Result.HostName);
    }
}
